package com.yeban.javase.day18.test.test1;

import java.util.concurrent.CountDownLatch;

/**
 * @Desc TODO
 * @Author yeban
 * @Date 2025/11/2
 *
 * 需求：
 * 线程1要执行打印：A和C，线程2要执行打印：B，
 * 但线程1在打印A后，要线程2打印B之后才能打印C，
 * 所以：线程1在打印A后，必须等待线程2打印完B之后才能继续执行。
 *
 * 多线程的情况下 C -> B -> A
 * CountDownLatch类
 *
 */
public class CountDownLatchCBA {

    public static void main(String[] args) {
        // 创建一个CountDownLatch计数器
        CountDownLatch countDownLatch = new CountDownLatch(3);

        // C线程 -> B线程 -> A线程
        for (int i = 67; i >= 65; i--) {
            char ch = (char) i;
            new Thread(() -> {
                System.out.println(Thread.currentThread().getName());
                // 计数器 -1
                countDownLatch.countDown();
            },"线程" + ch).start();
        }

        // 设置阻塞点
        try {
            countDownLatch.await();
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }

        System.out.println("线程执行顺序为：C -> B -> A");
    }
}
